﻿#ifndef __GAF_LIST_H__
#define __GAF_LIST_H__

namespace GAF
{
	//template<class T> class Struct -* _INTERFACE ForEach
		//template<class T> class Link
			template<class T> class List;
}
#define GAF_CList		GAF::List

namespace GAF
{
	/// 队列结构模板类
	template<class T>
	class List : public Link<T>
	{
	public:
		List();
		~List();

	public:
		/// 进队操作
		bool		In(const T& tIn);
		/// 出队操作
		bool		Out(T& _OUT tOut);	// 由于属于将唯一内容传出，采用参数形式

	private: // 屏蔽功能
		int		Add(const T& tNew);
		bool		Insert(const T& tNew, const T* ptNode = NULL);
		bool		Remove(const T& tNode);
	};




	template<class T>
	List<T>::List()
	{
	}

	template<class T>
	List<T>::~List()
	{
	}

	template<class T>
	bool List<T>::In(const T& tIn)
	{
		return (GAF_LINK_THIS)->Add(tIn) > 0;
	}

	template<class T>
	bool List<T>::Out(T& _OUT tOut)
	{
		if(GAF_LINK_THIS->m_pnHead == NULL)
		{
			_MEMCPY(&tOut, &(this->m_tNull), sizeof(T));
			return false;
		}

		T tNode = (T)(GAF_LINK_THIS)->GetHead();
		_MEMCPY(&tOut, &(this->m_tNull), sizeof(T));

		(GAF_LINK_THIS)->Remove(tNode);

		return true;
	}
}

#endif